/*-------------------<-- Start of Description-->---------------------\ | Check a date variable; | | Input variable must be a string (yyyymmdd); | |---------------------<-- End of Description-->----------------------| |--------------------------------------------------------------------| |------------<-- Start of Files or Arguments Needed-->---------------| | Arguments neede: | | invar : input variable; | | outvar: the output variable name; | | sql : where is this function used, within a sql statement or | | within a datastep; | |---------------<-- End of Files Arguments Needed-->-----------------| |--------------------------------------------------------------------| |------------------<-- Start of Files Created-->---------------------| | Usage: %parsedate(invar, outvar, sql); | \-------------------<-- End of Files Created-->---------------------*/ %macro parsedate(invar, outvar, sql); /*--------------------------------------------\ | Copy Right: Duo Zhou; | | Created: 3-11-2002 9:12pm; | | Purpose: Parse a date variable; | \--------------------------------------------*/ %if (%quote(&outvar) eq) %then %do; %let outvar=&invar; %end; %if (%quote(%upcase(&sql)) eq SQL) %then %do; case when missing(&invar) then . when length(&invar) < 4 and not missing(&invar) then . when length(&invar) >= 4 and length(&invar) < 6 then (INPUT((SUBSTR(&invar,1,4)||'1231'), YYMMDD8.)+INPUT((SUBSTR(&invar,1,4)||'0101'), YYMMDD8.)+1)/2 when length(&invar) >= 6 and length(&invar) < 8 then (INPUT((SUBSTR(&invar,1,6)||'01'), YYMMDD8.) + 15) else INPUT(SUBSTR(&invar,1,8), YYMMDD8.) end as &outvar %end; %else %if (%quote(%upcase(&sql)) ne SQL) %then %do; if length(&invar) < 4 and not missing(&invar) then &outvar=.; else if length(&invar) >= 4 and length(&invar) < 6 then &outvar = (INPUT((SUBSTR(&invar,1,4)||'1231'), YYMMDD8.) + INPUT((SUBSTR(&invar,1,4)||'0101'), YYMMDD8.)+1)/2; else if length(&invar) >= 6 and length(&invar) < 8 then &outvar = (INPUT((SUBSTR(&invar,1,6)||'01'), YYMMDD8.) + 15); else &outvar = INPUT(SUBSTR(&invar,1,8), YYMMDD8.); %end; %mend parsedate;